package services

import (
	"context"
	"encoding/json"
	"sanrenx.com/xyxf/app/daos"
	"sanrenx.com/xyxf/app/models"
	"sanrenx.com/xyxf/app/services/cache"
	"sanrenx.com/xyxf/pkg/gredis"
	"sanrenx.com/xyxf/pkg/logging"
	"sanrenx.com/xyxf/pkg/orm"
)

type CategorySrv struct {
}

/**
 * @Description: 根绝类型获取分类列表
 * @param mode 类型
 * @return result 分类列表
 * @return err 异常信息
 */
func (srv *CategorySrv) GetCategoriesByMode(mode string, pid int) (result []*models.Category, err error) {

	var cacheSrv cache.CategoryCache
	listKey := cacheSrv.GetListKey(mode, pid)
	ctx := context.Background()
	if gredis.Exist(ctx, listKey) {
		//数据在缓存中，获取数据
		data, err := gredis.Get(ctx, listKey)
		if err != nil {
			logging.Error(err)
			return nil, err
		}
		_ = json.Unmarshal([]byte(data), &result)
	} else {
		//缓存中没找到，刷新缓存获取数据
		modeDao := daos.CategoryDao{DB: orm.DB}
		if result, err = modeDao.GetCategoriesByMode(mode, pid); err != nil {
			logging.Error(err)
			return nil, err
		}
		//有数据则更新到缓存
		if len(result) > 0 {
			//更新缓存
			_ = gredis.Set(ctx, listKey, result, cache.CategoryExpireTime)
		}
	}

	return
}
